﻿//using System.Linq;

//using System;
//using System.Collections.Generic;
//using System.Collections;

////public class program
////{

////    // Create a method for a delegate.
////    public static void DelegateMethod(string message)
////    {
////        Console.WriteLine(message);
////    }

////    delegate void  Mydelegate(string message);
////    public static void Main(string[] args)
////    {
////        // Instantiate the delegate.
////        Mydelegate handler = DelegateMethod;

////        // Call the delegate.
////        handler("Hello World");
////        Console.ReadKey();

////    }

////}

////---------------------------------------------- 如何合并委托（多播委托）（C# 编程指南）

//using System;

//// Define a custom delegate that has a string parameter and returns void.
//delegate void CustomCallback(string s);

//class TestClass
//{
//    // Define two methods that have the same signature as CustomCallback.
//    static void Hello(string s)
//    {
//        Console.WriteLine($"  Hello, {s}!");
//    }

//    static void Goodbye(string s)
//    {
//        Console.WriteLine($"  Goodbye, {s}!");
//    }

//    static void Main()
//    {
//        // Declare instances of the custom delegate.
//        CustomCallback hiDel, byeDel, multiDel, multiMinusHiDel;

//        // In this example, you can omit the custom delegate if you
//        // want to and use Action<string> instead.
//        //Action<string> hiDel, byeDel, multiDel, multiMinusHiDel;

//        // Initialize the delegate object hiDel that references the
//        // method Hello.
//        hiDel = Hello;

//        // Initialize the delegate object byeDel that references the
//        // method Goodbye.
//        byeDel = Goodbye;

//        // The two delegates, hiDel and byeDel, are combined to
//        // form multiDel.
//        multiDel = hiDel + byeDel;

//        // Remove hiDel from the multicast delegate, leaving byeDel,
//        // which calls only the method Goodbye.
//        multiMinusHiDel = multiDel - hiDel;

//        Console.WriteLine("Invoking delegate hiDel:");
//        hiDel("A");
//        Console.WriteLine("Invoking delegate byeDel:");
//        byeDel("B");
//        Console.WriteLine("Invoking delegate multiDel:");
//        multiDel("C");
//        Console.WriteLine("Invoking delegate multiMinusHiDel:");
//        multiMinusHiDel("D");
//    }
//}
///* Output:
//Invoking delegate hiDel:
//  Hello, A!
//Invoking delegate byeDel:
//  Goodbye, B!
//Invoking delegate multiDel:
//  Hello, C!
//  Goodbye, C!
//Invoking delegate multiMinusHiDel:
//  Goodbye, D!
//*/
